/**
 * Historico de alteração
 *
 * Data         Autor   Descrição
 * 24/10/2010   Jerry   Criação do cabeçalho.
 *
 */

package Dados;

import java.sql.Connection;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import railbee.banco.dao.TrensDao;
import railbee.banco.dto.Trens;
import railbee.banco.exceptions.TrensDaoException;
import railbee.banco.factory.TrensDaoFactory;

/**
 *
 * @author Bruno
 */
public class MedidasBancoDeDados extends Thread{
    private Fila fila;
    private Connection conexao;
    private Pacote pack;
    private Trens trem;
    private TrensDao[] trem_dao;
    private String[] enderecos;


    public MedidasBancoDeDados(Fila fila, Connection conexao, String[] enderecos) {
        this.fila = fila;
        this.enderecos = enderecos;
        this.conexao = conexao;
        trem = new Trens();
        trem_dao = new TrensDao[enderecos.length];
        setDAOS();
        iniciaBanco();
    }


    @Override
    public void run() {
        while(true) {
            pack = fila.remove();
            Date data = new Date();
            for(int i = 0; i < enderecos.length; i++) {
                if(pack.getEndereco().equals(enderecos[i])) {
                    trem.setCorrente((float)pack.getCorrente());
                    trem.setEstacao(pack.getEstacao());
                    trem.setNumPassageiros(pack.getNumeroPassageiros());
                    trem.setPosicao((float)pack.getPosicao());
                    trem.setPressao((float)pack.getPressao());
                    trem.setTensao((float)pack.getTensao());
                    trem.setVelocidade((float)pack.getVelocidade());
                    trem.setData(data);
                    trem.setHora(data);
                    try {
                        trem_dao[i].insert(trem);
                    } catch (TrensDaoException ex) {
                        Logger.getLogger(MedidasBancoDeDados.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        }
    }

   public void setDAOS() {
       for(int i = 0; i < enderecos.length; i++) {
           if(i < 10) {
                trem_dao[i] = TrensDaoFactory.create(conexao, "trem0".concat(String.valueOf(i+1)));
           }
           else {
               trem_dao[i] = TrensDaoFactory.create(conexao, "trem".concat(String.valueOf(i+1)));
           }
       }
   }

    public void iniciaBanco() {
        this.start();
    }

    public void paraBanco() {
        this.stop();
    }
}
